package v1

type NewPluginParser func() PluginParser

type PluginParser interface {
	BeatPlugin
	//config是插件的配置，配置格式需自定义，一般使用json格式。
	NewParser(config []byte) (Parser, error)
}

// Parser 接口定义了数据解析器的基本功能，包括解析DataA数据并返回DataB数据。
// 本质是将[]byte解析为[][]string，还携带了一些元数据。
type Parser interface {
	Parse(DataA) (DataB, error)
}

// DataB 接口定义了数据解析后的结构，包含获取ID、获取负载和获取元数据的方法。
// GetID返回数据源ID，来源会从DataA中获取。
// payload一般存储为[][]string
type DataB interface {
	GetID() int
	GetPayload(sourceId int) any
	//一行一日志时，需要更新payload
	SetPayload(sourceId int, payload any)
	SetMeta(key string, value any)
	GetMetaByKey(key string) (any, bool)
	//将元数据复制到目标map中
	Copy(target map[string]any)
}

// type ParsedData struct {
// 	Id          int
// 	SourceIndex int            //数据源索引，用于标识数据源的位置，例如文件的行号、数据库的表名等。
// 	MetaData    map[string]any //元数据，存储日志的元数据信息，例如日志的时间、日志的级别、日志的来源等。
// 	Payload     any
// }

// func (d *ParsedData) GetID() int {
// 	return d.Id
// }
// func (d *ParsedData) GetPayload(sourceId int) any {
// 	return d.Payload
// }

// func (d *ParsedData) GetMetaData(sourceId int) map[string]any {
// 	return d.MetaData
// }
